#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
特征缓存系统演示脚本

展示核心功能：增量数据检测、特征缓存、数据合并
"""

from feature_cache_manager import FeatureCacheManager

def main():
    print("🎯 特征缓存系统演示")
    print("=" * 50)
    
    # 1. 初始化缓存管理器
    print("\n1️⃣ 初始化缓存管理器...")
    cache_manager = FeatureCacheManager()
    
    # 2. 显示当前缓存状态
    print("\n📊 当前缓存状态:")
    stats = cache_manager.get_statistics()
    
    for cache_type, info in stats.items():
        print(f"\n  📁 {cache_type}:")
        for key, value in info.items():
            print(f"    {key}: {value}")
    
    # 3. 检测新增数据
    print("\n2️⃣ 检测新增数据...")
    new_data_df, new_fund_codes = cache_manager.detect_new_data()
    
    print(f"📈 检测结果:")
    print(f"  新增数据行数: {len(new_data_df)}")
    print(f"  新增基金数量: {len(new_fund_codes)}")
    
    if len(new_data_df) > 0:
        print(f"  日期范围: {new_data_df['transaction_date'].min()} 到 {new_data_df['transaction_date'].max()}")
        print(f"  涉及基金: {new_data_df['fund_code'].unique()[:5]}...")  # 显示前5个
    
    # 4. 如果有缓存，演示数据加载
    if stats['enhanced_features']['exists']:
        print("\n3️⃣ 演示数据加载功能...")
        
        # 加载指定基金的数据
        sample_funds = ['001316', '000086']
        try:
            fund_data = cache_manager.load_enhanced_features(fund_codes=sample_funds)
            print(f"✅ 指定基金数据加载成功: {fund_data.shape}")
        except Exception as e:
            print(f"⚠️ 指定基金数据加载失败: {e}")
        
        # 加载指定日期范围的数据
        try:
            date_data = cache_manager.load_enhanced_features(
                date_range=('2024-04-10', '2024-04-15')
            )
            print(f"✅ 指定日期数据加载成功: {date_data.shape}")
        except Exception as e:
            print(f"⚠️ 指定日期数据加载失败: {e}")
    
    # 5. 如果有LLM特征，演示特征合并
    if stats['llm_features']['exists']:
        print("\n4️⃣ 演示特征合并功能...")
        try:
            merged_data = cache_manager.merge_features(fund_codes=['001316', '000086'])
            print(f"✅ 特征合并成功: {merged_data.shape}")
            
            # 显示特征统计
            embed_cols = [col for col in merged_data.columns if col.startswith('embed_')]
            label_cols = [col for col in merged_data.columns if col in ['fund_type', 'risk_level']]
            print(f"  Embedding特征: {len(embed_cols)} 个")
            print(f"  标签特征: {len(label_cols)} 个")
            
        except Exception as e:
            print(f"⚠️ 特征合并失败: {e}")
    
    # 6. 使用建议
    print("\n💡 使用建议:")
    
    if len(new_data_df) > 0:
        print("  🔧 发现新增数据，建议执行以下步骤:")
        print("     1. 为新增数据添加市场特征和时间特征")
        print("     2. 为新基金生成LLM特征")
        print("     3. 更新特征缓存")
        print("     4. 重新训练模型")
    else:
        print("  ✅ 没有新增数据，可以直接使用缓存数据进行模型训练")
    
    if not stats['enhanced_features']['exists']:
        print("  📝 首次运行，建议:")
        print("     1. 运行完整的特征生成流程")
        print("     2. 建立特征缓存")
    
    if not stats['llm_features']['exists']:
        print("  🤖 没有LLM特征缓存，建议:")
        print("     1. 运行LLM特征生成")
        print("     2. 建立LLM特征缓存")
    
    print("\n✅ 演示完成！")
    print("\n📚 更多功能请参考:")
    print("  - FEATURE_CACHE_README.md: 详细使用说明")
    print("  - test_feature_cache_system.py: 完整测试脚本")

if __name__ == "__main__":
    main() 